package Demo10.WaitAndNotify;

public class Demo02WaitAndNotify {
    public static void main(String[] args) {
        //创建锁对象
        Object obj = new Object();
        //创建一个顾客线程
        new Thread(){
            @Override
            public void run() {
                while (true){

                    //保证等待和唤醒的线程只能有一个在执行，需要使用同步技术
                    synchronized (obj){
                        System.out.println("顾客1告诉老板的包子数量");
                        //调用wait方法，放弃cpu的执行，进入到WAITING状态（无限等待）
                        try {
                            obj.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    //唤醒之后执行的代码
                    System.out.println("包子已经做好了顾客1,开吃");
                    System.out.println("=================");
                }
            }
        }.start();

        new Thread(){
            @Override
            public void run() {
                while (true){

                    //保证等待和唤醒的线程只能有一个在执行，需要使用同步技术
                    synchronized (obj){
                        System.out.println("顾客2告诉老板的包子数量");
                        //调用wait方法，放弃cpu的执行，进入到WAITING状态（无限等待）
                        try {
                            obj.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    //唤醒之后执行的代码
                    System.out.println("包子已经做好了顾客2,开吃");
                    System.out.println("=================");
                }
            }
        }.start();
        //创建一个老板线程
        new Thread(){
            @Override
            public void run() {
                while(true){
                    //花了五秒做包子
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (obj){
                        System.out.println("老板五秒钟之后做好包子，告知顾客可以吃包子了");
                        //obj.notify();
                        obj.notifyAll();//唤醒所有线程

                    }
                }
            }
        }.start();
    }
}
